import axios from 'axios'
import { Message } from 'element-ui'
// 导入vuex
import store from '@/store/index.js'
import router from '@/router'

// axios.create() 创建一个自定义配置的axios实例
// 创建的实例等同于以前axios 可以用service发起请求
// service多了{}里面的配置
const service = axios.create({
  // baseURL 基地址
  /*
  process.env 是node.js内置固定环境变量对象
  npm run dev -> 启动开发服务 项目根目录 .env.development环境变量配置文件里值添加到process.env对象上
  npm run build:prod -> 启动打包 项目根目录 .env.production环境变量配置文件里值添加到process.env对象上
  */

  // 问题: 为何不直接写在这里?
  // 答案: 开发的时候 用的是基地址1
  // 上线的时候 用的是基地址2
  baseURL: process.env.VUE_APP_BASE_API,
  // 超时时间: 本次请求5秒内还未得到后台响应 本次判定超时
  timeout: 5000 // request timeout
})

// request interceptor
service.interceptors.request.use(
  config => {
    // 获取vuex中的token
    const token = store.state.user.token
    // console.log(token)
    // 如果有token就添加到请求头上
    if (token) {
      // 设置请求头
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

service.interceptors.response.use(

  response => {
    const { success, message } = response.data
    if (success) {
      Message.success(response.data.message)
      return response
    } else {
      Message.error(message)
      return Promise.reject(message)
    }
  },
  async error => {
    if (error.response.data.code === 10002) {
      // 模拟退出登录
      await store.dispatch('user/userLogout')
      // 回到登录页面
      router.push(`/login?return_url=${router.currentRoute.fullPath}`)
    }
    return Promise.reject(error)
  }
)

export default service
